package test05;

import java.util.*;

// 1. 抽象产品接口
interface Agent {
    String processTask(String input);
    String getAgentType();
}

// 2. 具体产品类 - 数据分析智能体
class DataAnalysisAgent implements Agent {
    @Override
    public String processTask(String input) {
        return "📊 数据分析智能体正在处理: " + input +
                "\n   - 分析数据集结构" +
                "\n   - 生成可视化图表" +
                "\n   - 输出统计报告";
    }

    @Override
    public String getAgentType() {
        return "数据分析智能体";
    }
}

// 3. 具体产品类 - 代码生成智能体
class CodeGenerationAgent implements Agent {
    @Override
    public String processTask(String input) {
        return "💻 代码生成智能体正在处理: " + input +
                "\n   - 解析需求描述" +
                "\n   - 生成Python代码片段" +
                "\n   - 添加注释和文档";
    }

    @Override
    public String getAgentType() {
        return "代码生成智能体";
    }
}

// 4. 具体产品类 - 文档撰写智能体
class DocumentAgent implements Agent {
    @Override
    public String processTask(String input) {
        return "📝 文档撰写智能体正在处理: " + input +
                "\n   - 整理技术文档结构" +
                "\n   - 生成用户手册" +
                "\n   - 格式化输出";
    }

    @Override
    public String getAgentType() {
        return "文档撰写智能体";
    }
}

// 5. 抽象工厂
abstract class AgentFactory {
    // 工厂方法
    public abstract Agent createAgent();

    // 公共的准备工作
    public void prepareAgent() {
        System.out.println("准备创建智能体...");
    }
}

// 6. 具体工厂 - 数据分析智能体工厂
class DataAnalysisAgentFactory extends AgentFactory {
    @Override
    public Agent createAgent() {
        prepareAgent();
        System.out.println("创建数据分析智能体");
        return new DataAnalysisAgent();
    }
}

// 7. 具体工厂 - 代码生成智能体工厂
class CodeGenerationAgentFactory extends AgentFactory {
    @Override
    public Agent createAgent() {
        prepareAgent();
        System.out.println("创建代码生成智能体");
        return new CodeGenerationAgent();
    }
}

// 8. 具体工厂 - 文档撰写智能体工厂
class DocumentAgentFactory extends AgentFactory {
    @Override
    public Agent createAgent() {
        prepareAgent();
        System.out.println("创建文档撰写智能体");
        return new DocumentAgent();
    }
}

// 9. 智能体调度平台
class AgentScheduler {
    private Map<String, AgentFactory> factoryMap;

    public AgentScheduler() {
        factoryMap = new HashMap<>();
        // 注册默认的智能体工厂
        registerAgentFactory("数据分析", new DataAnalysisAgentFactory());
        registerAgentFactory("代码生成", new CodeGenerationAgentFactory());
        registerAgentFactory("文档撰写", new DocumentAgentFactory());
    }

    public void registerAgentFactory(String agentType, AgentFactory factory) {
        factoryMap.put(agentType, factory);
    }

    public String scheduleTask(String agentType, String task) {
        AgentFactory factory = factoryMap.get(agentType);
        if (factory == null) {
            return "❌ 错误: 不支持的任务类型: " + agentType;
        }

        Agent agent = factory.createAgent();
        System.out.println("✅ 成功创建: " + agent.getAgentType());
        return agent.processTask(task);
    }

    public List<String> getAvailableAgents() {
        return new ArrayList<>(factoryMap.keySet());
    }
}

// 10. 客户端代码
public class AIPlatform {
    public static void main(String[] args) {
        System.out.println("=== AI智能体调度平台 ===\n");

        // 创建调度器
        AgentScheduler scheduler = new AgentScheduler();

        // 显示可用智能体
        System.out.println("🛠️  可用智能体类型: " + scheduler.getAvailableAgents());

        // 测试不同任务类型
        System.out.println("\n--- 测试1: 数据分析任务 ---");
        String result1 = scheduler.scheduleTask("数据分析", "分析销售数据并生成季度报告");
        System.out.println(result1);

        System.out.println("\n--- 测试2: 代码生成任务 ---");
        String result2 = scheduler.scheduleTask("代码生成", "创建一个处理JSON数据的Python函数");
        System.out.println(result2);

        System.out.println("\n--- 测试3: 文档撰写任务 ---");
        String result3 = scheduler.scheduleTask("文档撰写", "编写API接口使用文档");
        System.out.println(result3);

        System.out.println("\n--- 测试4: 不支持的任务类型 ---");
        String result4 = scheduler.scheduleTask("图像识别", "识别图片中的物体");
        System.out.println(result4);

        // 演示动态扩展
        demonstrateExtension(scheduler);
    }

    // 演示扩展性
    private static void demonstrateExtension(AgentScheduler scheduler) {
        System.out.println("\n=== 扩展性演示: 新增图像识别智能体 ===");

        // 新增具体产品类
        class ImageRecognitionAgent implements Agent {
            @Override
            public String processTask(String input) {
                return "🖼️  图像识别智能体正在处理: " + input +
                        "\n   - 加载并预处理图像" +
                        "\n   - 识别物体和场景" +
                        "\n   - 输出识别结果";
            }

            @Override
            public String getAgentType() {
                return "图像识别智能体";
            }
        }

        // 新增具体工厂类
        class ImageRecognitionAgentFactory extends AgentFactory {
            @Override
            public Agent createAgent() {
                prepareAgent();
                System.out.println("创建图像识别智能体");
                return new ImageRecognitionAgent();
            }
        }

        // 注册新的智能体类型（无需修改现有代码）
        scheduler.registerAgentFactory("图像识别", new ImageRecognitionAgentFactory());

        System.out.println("✅ 新增智能体类型成功!");
        System.out.println("🛠️  更新后的可用智能体类型: " + scheduler.getAvailableAgents());

        // 测试新智能体
        System.out.println("\n--- 测试新智能体: 图像识别任务 ---");
        String result = scheduler.scheduleTask("图像识别", "识别照片中的猫和狗");
        System.out.println(result);
    }
}